package com.note.common.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 分页结果封装
 *
 * @param <T> 数据类型
 */
@Data
@Schema(description = "分页结果")
public class PageResult<T> {

    /**
     * 总记录数
     */
    @Schema(description = "总记录数", example = "100")
    private long total;

    /**
     * 总页数
     */
    @Schema(description = "总页数", example = "10")
    private long pages;

    /**
     * 当前页码
     */
    @Schema(description = "当前页码", example = "1")
    private long current;

    /**
     * 每页大小
     */
    @Schema(description = "每页大小", example = "10")
    private long size;

    /**
     * 数据列表
     */
    @Schema(description = "数据列表")
    private List<T> records;

    /**
     * 创建分页结果
     *
     * @param records 记录列表
     * @param total 总记录数
     * @param current 当前页
     * @param size 每页大小
     * @param <T> 数据类型
     * @return 分页结果
     */
    public static <T> PageResult<T> of(List<T> records, long total, long current, long size) {
        PageResult<T> result = new PageResult<>();
        result.setRecords(records);
        result.setTotal(total);
        result.setCurrent(current);
        result.setSize(size);
        
        // 计算总页数
        long pages = total / size;
        if (total % size != 0) {
            pages++;
        }
        result.setPages(pages);
        
        return result;
    }
    
    /**
     * 创建空的分页结果
     *
     * @param current 当前页
     * @param size 每页大小
     * @param <T> 数据类型
     * @return 空的分页结果
     */
    public static <T> PageResult<T> empty(long current, long size) {
        return of(Collections.emptyList(), 0, current, size);
    }
}